﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ferreteria.Forms
{
    public partial class frmArticuloVentaBuscar : Form
    {
        public Articulos articuloSeleccionado;
        public int artSeleccionadoId = 0;

        public Decimal precioUnitario;
        public Decimal precioFinal;
        public int cantidad;
        Articulos artTemp;

      
        DisancoEntities context;

        public frmArticuloVentaBuscar()
        {
            InitializeComponent();

            context = new DisancoEntities();

            Categorias catTodas = new Categorias();
            catTodas.categ_id = 0;
            catTodas.categ_nombre = "Todas";
            cmbCategorias.Items.Add(catTodas);
            cmbCategorias.SelectedIndex = 0;
            btnAgregar.Enabled = false;


            foreach (var categoria in context.Categorias)
            {
                cmbCategorias.Items.Add(categoria);
            }

            cmbCategorias.DisplayMember = "categ_nombre";
            cmbCategorias.ValueMember = "categ_id";

            dgvArticulos.DataSource = context.Articulos;
           
            dgvArticulos.Columns["art_id"].Visible = false;
            dgvArticulos.Columns["Categorias"].Visible = false;
            dgvArticulos.Columns["categ_id"].Visible = false;
            dgvArticulos.Columns["LineaNotaCredito"].Visible = false;
            dgvArticulos.Columns["LineaPedido"].Visible = false;
            dgvArticulos.Columns["LineaVenta"].Visible = false;
            dgvArticulos.Columns["LineaVentaAdicional"].Visible = false;
            dgvArticulos.Columns["RemitoLinea"].Visible = false;
            dgvArticulos.Columns["ProveedoresxArticulos"].Visible = false;
            dgvArticulos.Columns["LineaVenta1"].Visible = false;
            dgvArticulos.Columns["art_imagen"].Visible = false;
            dgvArticulos.Columns["art_codigobarra"].Visible = false;
            dgvArticulos.Columns["LineaCompra"].Visible = false;
            dgvArticulos.Columns["LineaComprasAdicionales"].Visible = false;
            dgvArticulos.Columns["CambiosStock"].Visible = false;
            dgvArticulos.Columns["art_bonif_fecha_ini"].Visible = false;
            dgvArticulos.Columns["art_bonif_fecha_fin"].Visible = false;
            dgvArticulos.Columns["art_precio_oferta"].HeaderText = "Oferta";

            dgvArticulos.Columns["art_nombre"].HeaderText = "Nombre";
            dgvArticulos.Columns["art_precio_lista"].HeaderText = "Precio Unitario $";
            dgvArticulos.Columns["art_bonificacion"].HeaderText = "Bonificacion (%)";            
            dgvArticulos.Columns["art_stock"].HeaderText = "Stock Actual";
            dgvArticulos.Columns["art_stock_adicional"].HeaderText = "Stock Adicional";
            dgvArticulos.Columns["art_codigo"].HeaderText = "Codigo";

            //dgvArticulos.Columns["art_nombre"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dgvArticulos.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvArticulos.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            string cadena = txbBusqueda.Text;

            if (cmbCategorias.SelectedIndex == 0)
            {
                var query = from art in context.Articulos
                            where art.art_nombre.Contains(cadena)
                            select art;

                dgvArticulos.DataSource = query;
            }
            else
            {
                var query = from art in ((Categorias)cmbCategorias.SelectedItem).Articulos
                            where art.art_nombre.Contains(cadena)
                            select art;

                dgvArticulos.DataSource = query;
            }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                int artId = Convert.ToInt32(dgvArticulos.SelectedRows[0].Cells[0].Value);
                this.articuloSeleccionado = context.Articulos.FirstOrDefault(art => art.art_id == artId);
                this.cantidad = Convert.ToInt32(numCantidad.Value);

                if (cantidad == 0)
                {
                    DialogResult Message = MessageBox.Show("Debe Seleccionar una Cantidad mayor a 0",
                                                                                  "Disanco Sanitarios", MessageBoxButtons.OK);
                    this.articuloSeleccionado = null;
                    btnAgregar.Enabled = false;

                }
                else
                {
                    if (cantidad > (articuloSeleccionado.art_stock + articuloSeleccionado.art_stock_adicional))
                    {
                        DialogResult Message = MessageBox.Show("Stock Insuciente para la Cantidad Solicitada ",
                                                                                     "Disanco Sanitarios", MessageBoxButtons.OK);

                        this.articuloSeleccionado = null;
                        btnAgregar.Enabled = false;
                    }
                    else
                    {
                        this.Close();
                    }
                }                
            }
            catch
            {
            }
    
            
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.articuloSeleccionado = null;
            this.Close();
        }

        private void dgvArticulos_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            btnAgregar.Enabled = true;
            int artId = Convert.ToInt32(dgvArticulos.SelectedRows[0].Cells["art_id"].Value);
            artTemp = context.Articulos.FirstOrDefault(a => a.art_id == artId);

            calcularPrecioFinal();           
        }

        private void dgvArticulos_SelectionChanged(object sender, EventArgs e)
        {
            
        }

        void calcularPrecioFinal()
        {
            decimal precioLista = Convert.ToDecimal(artTemp.art_precio_lista);
            decimal bonificacion = Convert.ToDecimal(artTemp.art_bonificacion);
            decimal precioOferta = Convert.ToDecimal(artTemp.art_precio_oferta);
            decimal cantidad = numCantidad.Value;

            txbOfertaBonificacion.Text = "No existente";
            txbOfertaCantidad.Text = "No existente";

            if (precioOferta == 0)
            {
                this.precioFinal = (precioLista - (precioLista / 100 * bonificacion)) * cantidad;
                this.precioUnitario = precioLista - (precioLista / 100 * bonificacion);
                txbPrecioUnitario.Text = "$ " + Convert.ToString(this.precioUnitario);
            }
            else
            {
                //decimal precioOferta = Convert.ToDecimal(articulo.art_precio_oferta);
                decimal ofertaDescuento = 0;
                int cantidadOferta = 0;
                
                //Busco si tiene descuentos por cantidad y elijo el descuento segun la mayor cantidad posible
                foreach (var oferta in artTemp.OfertasxArticulo)
                {
                    if (oferta.oferta_estado != 0)
                    {
                        if (cantidad >= oferta.oferta_cantidad)
                        {
                            if (oferta.oferta_cantidad > cantidadOferta)
                            {
                                cantidadOferta = Convert.ToInt32(oferta.oferta_cantidad);
                                ofertaDescuento = Convert.ToDecimal(oferta.oferta_porcentaje);
                            }
                        }
                    }
                }

                this.precioFinal = (precioOferta - (precioOferta / 100 * ofertaDescuento)) * cantidad;
                this.precioUnitario = precioOferta - (precioOferta / 100 * ofertaDescuento);
                txbPrecioUnitario.Text = "$ " + Convert.ToString(this.precioUnitario);

                if (cantidadOferta != 0)
                {
                    txbOfertaCantidad.Text = cantidadOferta.ToString();
                    txbOfertaBonificacion.Text = "% " + ofertaDescuento.ToString();
                }
            }


            txbPrecioFinal.Text = "$ " + this.precioFinal.ToString();
        }

        private void txbCantidad_Click(object sender, EventArgs e)
        {
            btnAgregar.Enabled = true;
        }

        private void numCantidad_ValueChanged(object sender, EventArgs e)
        {
            if (artTemp != null)
            {
                calcularPrecioFinal();
            }
        }
    }
}